# -*- coding: utf-8 -*-
import cherrypy
import sys, os
import traceback
import commonlib
import simplejson as json

localFilepath = '/home/hoangnamhai/HarvestedData'

class RestfulServices:
    ''' Không dùng beanstalk/queue, không dùng XmlRpc/JsonRpc, dùng Resful API để triển khai được nhanh, extend dễ.
        CherryPy chạy ở chế độ tự restart khi có update code.
        Reference:
            http://www.voidspace.org.uk/python/articles/urllib2.shtml
            http://www.cherrypy.org/wiki/CherryPyTutorial
            http://developer.yahoo.com/python/python-rest.html
    '''    
    def __init__(self):
        pass
        
    @cherrypy.expose
    def index(self):
        pass
    
    def __standardlizePrefixStr(self, prefix):
        ''' Chuẩn hóa prefix để dùng tạo filename. Prefix cần có dạng /abcd/
        '''
        prefix = prefix.strip()
        if prefix=='': return ''
        if prefix.startswith('/') == False: prefix = '/' + prefix
        if prefix.endswith('/') == False: prefix = '/' + prefix
        return prefix
        
    @cherrypy.expose
    def downloadImage(self, url, prefix='', ext='jpg'):
        prefix = self.__standardlizePrefixStr(prefix)
        relativename = '{0}{1}.{2}'.format(prefix, commonlib.getMd5FileName(url), ext)
        filename = '{0}{1}'.format(localFilepath, relativename)
        print 'downloadImage: {0} -> {1}'.format(url, filename)
        
        # Nếu download thành công, không lỗi thì sẽ chuyển lại tên file lưu ở dạng đường dẫn tương đối
        result = commonlib.downloadImage(url, filename)
        if not result.startswith('Err'): result = relativename
        return result

    @cherrypy.expose
    def downloadMp3(self, url, prefix='', ext='mp3'):
        prefix = self.__standardlizePrefixStr(prefix)
        relativename = '{0}{1}.{2}'.format(prefix, commonlib.getMd5FileName(url), ext)
        filename = '{0}{1}'.format(localFilepath, relativename)
        
        # Nếu download thành công, không lỗi thì sẽ chuyển lại tên file lưu ở dạng đường dẫn tương đối
        result = commonlib.downloadMp3(url, filename)
        # result = str(result)
        print result
        if not result[0].startswith('Err'): 
            return json.dumps([relativename, result[1]])
        return json.dumps(result)

if __name__ == '__main__':
    _cp_config = {'tools.gzip.on': True}
    global_conf = {
        'global': {
        'server.socket_host': '0.0.0.0',
        'server.socket_port': 3334,
        'tools.encode.on': True,
        'tools.encode.encoding': 'UTF-8'
        },
    }
    cherrypy.config.update(global_conf)
    cherrypy.quickstart(RestfulServices())